<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="条件语句 语法结构 # 【注意 1】语句块内并不能为空 # 【注意 2】不要吝啬空格（与变量的定义不同，变量等号前后不能有空格） if [ expr ]; then echo &#34;if&#34; elif [ expr ]; then echo &#34;elif&#34; else echo &#34;else&#34; fi 速记  test expr 和 [ expr ] 效果相同  是 Shell 命令，通过 whereis [ =》 /bin/[， man [ 可查看命令帮助 用于 判断文件、判断字符串 ，支持 == 、!= 判断整数时，使用 -eq 、 -gt 形式 逻辑组合使用 -a 、 -o   [[ expr ]] 支持 模式匹配  == 精确匹配： [[ hello == &quot;hell?"><meta property="og:title" content="if 条件语句" />
<meta property="og:description" content="条件语句 语法结构 # 【注意 1】语句块内并不能为空 # 【注意 2】不要吝啬空格（与变量的定义不同，变量等号前后不能有空格） if [ expr ]; then echo &#34;if&#34; elif [ expr ]; then echo &#34;elif&#34; else echo &#34;else&#34; fi 速记  test expr 和 [ expr ] 效果相同  是 Shell 命令，通过 whereis [ =》 /bin/[， man [ 可查看命令帮助 用于 判断文件、判断字符串 ，支持 == 、!= 判断整数时，使用 -eq 、 -gt 形式 逻辑组合使用 -a 、 -o   [[ expr ]] 支持 模式匹配  == 精确匹配： [[ hello == &quot;hell?" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://hello-world-example.github.io/linux/docs/100_Shell/020.if/" />
<meta property="article:modified_time" content="2022-12-11T01:38:37+08:00" />
<title>if 条件语句 | Linux</title>
<link rel="icon" href="/linux/favicon.png" type="image/x-icon">


<link rel="stylesheet" href="/linux/book.min.00b8e784201abfe629a6e0741e94bf44575af8612aec171d94e4ecbd3692cf5c.css" integrity="sha256-ALjnhCAav&#43;YppuB0HpS/RFda&#43;GEq7BcdlOTsvTaSz1w=">


<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->

  
</head>

<body>
  <input type="checkbox" class="hidden" id="menu-control" />
  <main class="container flex">
    <aside class="book-menu">
      
  <nav>
<h2 class="book-brand">
  <a href="/linux"><span>Linux</span>
  </a>
</h2>












  

  
  





 
  
    




  
  <ul>
    
      
        

  <li>
    

  
  <a href="/linux/docs/100_Shell/" class="collapsed ">Shell</a>
  


    




  
  <ul>
    
      
        <li>

  
  <a href="/linux/docs/100_Shell/007.zsh/" class="">zsh</a>
  

</li>
      
    
      
        <li>

  
  <a href="/linux/docs/100_Shell/010.var/" class="">var 变量与参数</a>
  

</li>
      
    
      
        <li>

  
  <a href="/linux/docs/100_Shell/011.var_string/" class="">var 字符串处理</a>
  

</li>
      
    
      
        <li>

  
  <a href="/linux/docs/100_Shell/020.if/" class="active">if 条件语句</a>
  

</li>
      
    
      
        <li>

  
  <a href="/linux/docs/100_Shell/030.for/" class="">for 循环语句</a>
  

</li>
      
    
      
        <li>

  
  <a href="/linux/docs/100_Shell/035.array/" class="">数组操作</a>
  

</li>
      
    
      
        <li>

  
  <a href="/linux/docs/100_Shell/050.function/" class="">function 函数</a>
  

</li>
      
    
      
        <li>

  
  <a href="/linux/docs/100_Shell/900.21/" class="">输出从定向</a>
  

</li>
      
    
      
        <li>

  
  <a href="/linux/docs/100_Shell/901.nohup/" class="">后台运行</a>
  

</li>
      
    
  </ul>
  



  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/200_Command/" class="collapsed ">Command</a>
  


    






  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/300_Configuration/" class="collapsed ">文件和配置</a>
  


    






  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/900_FAQ/" class="">FAQ</a>
  


    




  
  <ul>
    
  </ul>
  



  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/999_Links/" class="">Links 🔗</a>
  


    




  
  <ul>
    
  </ul>
  



  </li>


      
    
  </ul>
  



  
















</nav>




  <script>(function(){var menu=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(event){localStorage.setItem("menu.scrollTop",menu.scrollTop);});menu.scrollTop=localStorage.getItem("menu.scrollTop");})();</script>


 
    </aside>

    <div class="book-page">
      <header class="book-header">
        
  <div class="flex align-center justify-between">
  <label for="menu-control">
    <img src="/linux/svg/menu.svg" class="book-icon" alt="Menu" />
  </label>

  <strong>if 条件语句</strong>

  <label for="toc-control">
    <img src="/linux/svg/toc.svg" class="book-icon" alt="Table of Contents" />
  </label>
</div>


  
    <input type="checkbox" class="hidden" id="toc-control" />
    <aside class="hidden clearfix">
      
  <nav id="TableOfContents">
  <ul>
    <li><a href="#条件语句">条件语句</a>
      <ul>
        <li><a href="#语法结构">语法结构</a></li>
        <li><a href="#速记">速记</a></li>
        <li><a href="#对比">对比</a></li>
        <li><a href="#-expr---expr---文件判断">[ expr ] 、[[ expr ]]  文件判断</a></li>
        <li><a href="#-expr---字符串判断">[[ expr ]]  字符串判断</a></li>
      </ul>
    </li>
  </ul>
</nav>


    </aside>
  
 
      </header>

      
      
  <article class="markdown"><h1 id="条件语句">条件语句</h1>
<h2 id="语法结构">语法结构</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#75715e"># 【注意 1】语句块内并不能为空</span>
<span style="color:#75715e"># 【注意 2】不要吝啬空格（与变量的定义不同，变量等号前后不能有空格）</span>
<span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> expr <span style="color:#f92672">]</span>; <span style="color:#66d9ef">then</span>
  echo <span style="color:#e6db74">&#34;if&#34;</span>
<span style="color:#66d9ef">elif</span> <span style="color:#f92672">[</span> expr <span style="color:#f92672">]</span>; <span style="color:#66d9ef">then</span>
  echo <span style="color:#e6db74">&#34;elif&#34;</span>
<span style="color:#66d9ef">else</span>
  echo <span style="color:#e6db74">&#34;else&#34;</span>
<span style="color:#66d9ef">fi</span>
</code></pre></div><h2 id="速记">速记</h2>
<ul>
<li><code>test expr</code> 和 <code>[ expr ]</code> 效果相同
<ul>
<li>是 Shell 命令，通过 <code>whereis [</code> =》 <code>/bin/[</code>， <code>man [</code> 可查看命令帮助</li>
<li>用于 <strong>判断文件</strong>、<strong>判断字符串</strong> ，支持 <code>==</code> 、<code>!=</code></li>
<li>判断<strong>整数</strong>时，使用 <code>-eq</code> 、 <code>-gt</code> 形式</li>
<li>逻辑组合使用 <code>-a</code> 、 <code>-o</code></li>
</ul>
</li>
<li><code>[[ expr ]]</code> 支持 <strong>模式匹配</strong>
<ul>
<li><code>==</code> 精确匹配： <code>[[ hello == &quot;hell?&quot; ]]</code> 为 false</li>
<li><code>==</code> 模糊匹配： <code>[[ hello == hell? ]]</code> 为 true</li>
<li><code>=~</code> 正则匹配： <code>[[ hello =~ ^h.{4} ]]</code> 为 true</li>
<li>逻辑组合使用： <code>&amp;&amp;</code> 、 <code>||</code></li>
<li>数字比较 <code>[[ 1 -lt 3 &amp;&amp; 3 -eq 3 ]]</code> 、 <code>[[ 1 &lt; 3 &amp;&amp; 3 == 3 ]]</code> 为 true， 但是建议使用 <code>(( 1 &lt; 3 &amp;&amp; 3 == 3 ))</code></li>
</ul>
</li>
<li><code>let expr</code> 和 <code>(( expr ))</code> 用于<strong>算术运算</strong>，如： <code>(( 99 + 1 &lt;= 101 ))</code>
<ul>
<li>直接使用熟悉的 <code>&lt;</code>、 <code>&gt;</code> 等比较运算符</li>
<li>直接使用变量名如：<code>var</code>，不需要 <code>$var</code> 这样的形式</li>
</ul>
</li>
</ul>
<h2 id="对比">对比</h2>
<table>
<thead>
<tr>
<th align="right"></th>
<th align="center">[ expr ]</th>
<th align="center">[[ expr ]]</th>
<th align="center">(( expr ))</th>
</tr>
</thead>
<tbody>
<tr>
<td align="right"></td>
<td align="center">命令，<code>/bin/[</code></td>
<td align="center">语法关键字</td>
<td align="center"></td>
</tr>
<tr>
<td align="right"><strong>主要用途</strong></td>
<td align="center">文件判断</td>
<td align="center">字符串匹配、文件判断</td>
<td align="center">算术运算</td>
</tr>
<tr>
<td align="right"><strong>大小比较</strong></td>
<td align="center"><code>==</code>、 <code>!=</code>、<code>-lt</code>、<code>-gt</code></td>
<td align="center"><code>==</code>、<code>=~</code></td>
<td align="center"><code>&gt;=</code> 、 <code>==</code></td>
</tr>
<tr>
<td align="right"><strong>逻辑运算</strong></td>
<td align="center"><code>-a</code> 、 <code>-o</code></td>
<td align="center"><code>&amp;&amp;</code> 、 <code>||</code></td>
<td align="center"><code>&amp;&amp;</code> 、 <code>||</code></td>
</tr>
<tr>
<td align="right"><strong>逻辑短路</strong></td>
<td align="center"><code>false</code></td>
<td align="center"><code>true</code></td>
<td align="center"></td>
</tr>
</tbody>
</table>
<h2 id="-expr---expr---文件判断">[ expr ] 、[[ expr ]]  文件判断</h2>
<table>
<thead>
<tr>
<th align="center">文件比较运算符</th>
<th align="center">操作全称</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">-e filename</td>
<td align="center"><code>exist</code></td>
<td>文件存在</td>
</tr>
<tr>
<td align="center">-d filename</td>
<td align="center"><code>directory</code></td>
<td>文件存在 &amp;&amp; 是目录</td>
</tr>
<tr>
<td align="center">-f filename</td>
<td align="center"><code>file</code></td>
<td>文件存在 &amp;&amp; 是常规文件</td>
</tr>
<tr>
<td align="center">-s filename</td>
<td align="center"><code>size</code></td>
<td>文件存在 &amp;&amp; 大小不为 0</td>
</tr>
<tr>
<td align="center">-L filename</td>
<td align="center"><code>link</code></td>
<td>文件存在 &amp;&amp; 是符号链接</td>
</tr>
<tr>
<td align="center">-r filename</td>
<td align="center"><code>readable</code></td>
<td>文件存在 &amp;&amp; 可读</td>
</tr>
<tr>
<td align="center">-w filename</td>
<td align="center"><code>writable</code></td>
<td>文件存在 &amp;&amp; 可写</td>
</tr>
<tr>
<td align="center">-x filename</td>
<td align="center"><code>executable</code></td>
<td>文件存在 &amp;&amp; 可执行</td>
</tr>
<tr>
<td align="center">filename1 -nt filename2</td>
<td align="center"><code>new that</code></td>
<td>filename1 比 filename2 新</td>
</tr>
<tr>
<td align="center">filename1 -ot filename2</td>
<td align="center"><code>old that</code></td>
<td>filename1 比 filename2 旧</td>
</tr>
<tr>
<td align="center">-c filename</td>
<td align="center"><code>char</code></td>
<td>文件存在 &amp;&amp; 是字符型特殊文件</td>
</tr>
<tr>
<td align="center">-d filename</td>
<td align="center"><code>block</code></td>
<td>文件存在 &amp;&amp; 是块特殊文件</td>
</tr>
</tbody>
</table>
<h2 id="-expr---字符串判断">[[ expr ]]  字符串判断</h2>
<table>
<thead>
<tr>
<th align="center">表达式</th>
<th align="left">描述</th>
<th>备注</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center"><code>-z &quot;${str}&quot;</code> 或 <code>${#str} == 0</code></td>
<td align="left">长度为 0</td>
<td><code>zero</code></td>
</tr>
<tr>
<td align="center"><code>-n &quot;${str}&quot;</code> 或 <code>${#str} &gt; 0</code></td>
<td align="left">长度不为 0</td>
<td><code>not zero</code></td>
</tr>
<tr>
<td align="center"><code>${str} == &quot;string&quot;</code></td>
<td align="left">等值比较</td>
<td></td>
</tr>
<tr>
<td align="center"><code>&quot;hello&quot; == hell?</code></td>
<td align="left"><strong>模糊匹配</strong></td>
<td>模糊表达式不能加 双引号</td>
</tr>
<tr>
<td align="center"><code>&quot;hello&quot; != hi*</code></td>
<td align="left"><strong>模糊不匹配</strong></td>
<td></td>
</tr>
<tr>
<td align="center"><code>&quot;hello&quot; =~ ^h.{4}</code></td>
<td align="left"><strong>正则匹配</strong></td>
<td></td>
</tr>
<tr>
<td align="center"><code>&quot;abc&quot; &lt; &quot;b&quot;</code></td>
<td align="left">ASCII 比较</td>
<td></td>
</tr>
</tbody>
</table>
</article>
 
      

      <footer class="book-footer">
        
  <div class="flex justify-between">



  <div>
    
    <a class="flex align-center" href="https://github.com/hello-world-example/Linux/commit/d07f642a1d3d369f2ee692c45224763cdf4a7f29" title='Last modified by kaibin.yang | Dec 11, 2022' target="_blank" rel="noopener">
      <img src="/linux/svg/calendar.svg" class="book-icon" alt="Calendar" />
      <span>Dec 11, 2022</span>
    </a>
  </div>



  <div>
    <a class="flex align-center" href="https://github.com/hello-world-example/Linux/edit/master/HuGo/content/docs/100_Shell/020.if.md" target="_blank" rel="noopener">
      <img src="/linux/svg/edit.svg" class="book-icon" alt="Edit" />
      <span>Edit this page</span>
    </a>
  </div>

</div>

 
        <script>
    var images = document.getElementsByTagName("img")
    for (var i = 0; i < images.length; i++) {
        var image = images[i]
        var src = image.getAttribute("src");
         
        if (src.startsWith("-images")) {
            image.setAttribute("src", "../" + src)
        }
         
        if (window.location.href.indexOf("/posts/")) {
            src = src.replace("../drawio/", "../../drawio/")
            image.setAttribute("src", src)
        }
         
        if (src.startsWith("../drawio/")) {
            image.setAttribute("src", src.replace("../drawio/", "../"))
        }

         
        if(src.indexOf("/svg/") < 0){
             
            image.onclick = function (e) {
                window.open(e.target.getAttribute("src"))
            }
        }
    }

</script>

      </footer>

      
  
  <div class="book-comments">

</div>
  
 

      <label for="menu-control" class="hidden book-menu-overlay"></label>
    </div>

    
    <aside class="book-toc">
      
  <nav id="TableOfContents">
  <ul>
    <li><a href="#条件语句">条件语句</a>
      <ul>
        <li><a href="#语法结构">语法结构</a></li>
        <li><a href="#速记">速记</a></li>
        <li><a href="#对比">对比</a></li>
        <li><a href="#-expr---expr---文件判断">[ expr ] 、[[ expr ]]  文件判断</a></li>
        <li><a href="#-expr---字符串判断">[[ expr ]]  字符串判断</a></li>
      </ul>
    </li>
  </ul>
</nav>

 
    </aside>
    
  </main>

  
</body>

</html>












